package com.blog.cmrpersonalblog.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

/**
 * 榜单配置类
 */
@Data
@Configuration
@ConfigurationProperties(prefix = "ranking")
public class RankingConfig {
    
    /**
     * 是否启用Redis排行榜
     */
    private Boolean redisEnabled = true;
    
    /**
     * 榜单最大容量（TOP N）
     */
    private Integer maxSize = 50;
    
    /**
     * 刷新配置
     */
    private RefreshConfig refresh = new RefreshConfig();
    
    /**
     * 热度计算权重配置
     */
    private HeatWeightConfig heatWeight = new HeatWeightConfig();
    
    /**
     * 刷新配置
     */
    @Data
    public static class RefreshConfig {
        /**
         * 是否启用定时刷新任务
         */
        private Boolean enabled = true;
        
        /**
         * 刷新间隔（天）- 默认7天（一周）
         */
        private Integer intervalDays = 7;
        
        /**
         * 每周刷新时间（星期几，1-7，1表示周一）
         */
        private Integer weekDay = 1;
        
        /**
         * 每周刷新时间（小时，0-23）
         */
        private Integer hour = 2;
        
        /**
         * 每周刷新时间（分钟，0-59）
         */
        private Integer minute = 0;
    }
    
    /**
     * 热度计算权重配置
     */
    @Data
    public static class HeatWeightConfig {
        /**
         * 浏览量权重
         */
        private Double viewWeight = 1.0;
        
        /**
         * 点赞数权重
         */
        private Double likeWeight = 3.0;
        
        /**
         * 收藏数权重
         */
        private Double collectWeight = 5.0;
        
        /**
         * 评论数权重
         */
        private Double commentWeight = 2.0;
        
        /**
         * 分享数权重
         */
        private Double shareWeight = 4.0;
        
        /**
         * 时间衰减因子（天）
         * 文章每过一天，热度衰减的比例
         */
        private Double timeDecayFactor = 0.95;
        
        /**
         * 时间衰减最大天数
         * 超过这个天数的文章不再计算时间衰减
         */
        private Integer maxDecayDays = 30;
        
        /**
         * 作者粉丝数权重
         */
        private Double fansWeight = 0.1;
        
        /**
         * 作者文章数权重
         */
        private Double articleCountWeight = 0.05;
    }
}

